﻿#pragma warning disable IDE1006
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WUDI.ECharts.Polar.Tooltip
{
	/// <summary>
	/// 本坐标系特定的 tooltip 设定
	/// <para>
	/// 可以设置在全局，即 tooltip
	/// </para>
	/// <para>
	/// #tooltip
	/// </para>
	/// <para>
	/// 可以设置在坐标系中，即 single.tooltip
	/// </para>
	/// <para>
	/// #single.tooltip
	/// </para>
	/// <para>
	/// 可以设置在系列中，即 series.tooltip
	/// </para>
	/// <para>
	/// #series.tooltip
	/// </para>
	/// <para>
	/// 可以设置在系列的每个数据项中，即 series.data.tooltip
	/// </para>
	/// <para>
	/// #series.data.tooltip
	/// </para>
	/// </summary>
	public class Tooltip
	{

		/// <summary>
		/// 是否显示提示框组件，包括提示框浮层和 axisPointer
		/// <para>
		/// #tooltip.axisPointer
		/// </para>
		/// </summary>
		public dynamic show { get; set; }  = true;

		/// <summary>
		/// 触发类型
		/// <para>
		/// item
		/// </para>
		/// <para>
		/// 数据项图形触发，主要在散点图，饼图等无类目轴的图表中使用
		/// </para>
		/// <para>
		/// axis
		/// </para>
		/// <para>
		/// 坐标轴触发，主要在柱状图，折线图等会使用类目轴的图表中使用
		/// </para>
		/// <para>
		/// 在 ECharts 2.x 中只支持类目轴上使用 axis trigger，在 ECharts 3 中支持在axisPointer.axis
		/// </para>
		/// <para>
		/// #tooltip.axisPointer.axis 指定坐标轴
		/// </para>
		/// <para>
		/// none
		/// </para>
		/// <para>
		/// 什么都不触发
		/// </para>
		/// </summary>
		public dynamic trigger { get; set; }  = "item";

		/// <summary>
		/// 坐标轴指示器配置项
		/// <para>
		/// tooltip.axisPointer 是配置坐标轴指示器的快捷方式
		/// </para>
		/// <para>
		/// 实际上坐标轴指示器的全部功能，都可以通过轴上的 axisPointer 配置项完成（例如 angleAxis.axisPointer
		/// </para>
		/// <para>
		/// #angleAxis.axisPointer）
		/// </para>
		/// <para>
		/// 但是使用 tooltip.axisPointer 在简单场景下会更方便一些
		/// </para>
		/// <para>
		/// 注意
		/// </para>
		/// <para>
		/// tooltip.axisPointer 中诸配置项的优先级低于轴上的 axisPointer 的配置项
		/// </para>
		/// <para>
		/// 坐标轴指示器是指示坐标轴当前刻度的工具
		/// </para>
		/// <para>
		/// 如下例，鼠标悬浮到图上，可以出现标线和刻度文本
		/// </para>
		/// <para>
		/// 上例中，使用了 axisPointer.link
		/// </para>
		/// <para>
		/// #axisPointer.link 来关联不同的坐标系中的 axisPointer
		/// </para>
		/// <para>
		/// 一般来说，axisPointer 的具体配置项会配置在各个轴中（如 tooltip.axisPointer
		/// </para>
		/// <para>
		/// #tooltip.axisPointer）
		/// </para>
		/// <para>
		/// 但是这几个选项只能配置在全局的 axisPointer 中
		/// </para>
		/// <para>
		/// axisPointer.link
		/// </para>
		/// <para>
		/// #axisPointer.link
		/// </para>
		/// <para>
		/// 直角坐标系 single
		/// </para>
		/// <para>
		/// #single 中的每个轴都自己的 axisPointer
		/// </para>
		/// <para>
		/// 设置轴上的 axisPointer.show（例如 xAxis.axisPointer.show
		/// </para>
		/// <para>
		/// #xAxis.axisPointer.show）为 true，则显示此轴的 axisPointer
		/// </para>
		/// <para>
		/// 设置 tooltip.axisPointer.axis
		/// </para>
		/// <para>
		/// #tooltip.axisPointer.axis 改变这种选择
		/// </para>
		/// <para>
		/// 注意，轴上如果设置了 axisPointer，会覆盖此设置
		/// </para>
		/// <para>
		/// 设置轴上的 axisPointer.label.show（例如 xAxis.axisPointer.label.show
		/// </para>
		/// <para>
		/// #xAxis.axisPointer.show）为 true，则显示此轴的 axisPointer 的 label
		/// </para>
		/// <para>
		/// 设置 tooltip.axisPointer.type
		/// </para>
		/// <para>
		/// #tooltip.axisPointer.type 为 cross 时会自动显示 axisPointer 的 label
		/// </para>
		/// <para>
		/// 关于触屏的 axisPointer 的设置
		/// </para>
		/// <para>
		/// 设置轴上的 axisPointer.handle.show（例如 xAxis.axisPointer.handle.show
		/// </para>
		/// <para>
		/// #xAxis.axisPointer.handle.show 为 true 则会显示出此 axisPointer 的拖拽按钮
		/// </para>
		/// <para>
		/// （polar 坐标系暂不支持此功能）
		/// </para>
		/// <para>
		/// 如果发现此时 tooltip 效果不良好，可设置 tooltip.alwaysShowContent
		/// </para>
		/// <para>
		/// #tooltip.alwaysShowContent 为 true（效果为 tooltip 一直显示）
		/// </para>
		/// <para>
		/// 参见snap
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=line-tooltip-touch&amp;edit=1&amp;reset=1"/>，则 axisPointer 会自动吸附到最近的点上
		/// </para>
		/// </summary>
		public WUDI.ECharts.Polar.Tooltip.AxisPointer.AxisPointer axisPointer { get; set; } 

		/// <summary>
		/// 提示框浮层的位置，默认不设置时位置会跟随鼠标的位置
		/// <para>
		/// Array
		/// </para>
		/// <para>
		/// 通过数组表示提示框浮层的位置，支持数字设置绝对位置，百分比设置相对位置
		/// </para>
		/// <para>
		/// 示例:
		/// </para>
		/// <para>
		/// Function
		/// </para>
		/// <para>
		/// point: 鼠标位置，如 [20, 40]
		/// </para>
		/// <para>
		/// params: 同 formatter 的参数相同
		/// </para>
		/// <para>
		/// dom: tooltip 的 dom 对象
		/// </para>
		/// <para>
		/// rect: 只有鼠标在图形上时有效，是一个用x, y, width, height四个属性表达的图形包围盒
		/// </para>
		/// <para>
		/// size: 包括 dom 的尺寸和 echarts 容器的当前尺寸，例如
		/// </para>
		/// <para>
		/// {contentSize: [width, height], viewSize: [width, height]}
		/// </para>
		/// <para>
		/// 可以是一个表示 tooltip 位置的数组，数组值可以是绝对的像素值，也可以是相  百分比
		/// </para>
		/// <para>
		/// 也可以是一个对象，如
		/// </para>
		/// <para>
		/// {left: 10, top: 30}，或者 {right: 20%, bottom: 40}
		/// </para>
		/// <para>
		/// inside
		/// </para>
		/// <para>
		/// 鼠标所在图形的内部中心位置，只在 trigger
		/// </para>
		/// <para>
		/// #tooltip.trigger 为item的时候有效
		/// </para>
		/// <para>
		/// top
		/// </para>
		/// <para>
		/// 鼠标所在图形上侧，只在 trigger
		/// </para>
		/// <para>
		/// #tooltip.trigger 为item的时候有效
		/// </para>
		/// <para>
		/// left
		/// </para>
		/// <para>
		/// 鼠标所在图形左侧，只在 trigger
		/// </para>
		/// <para>
		/// #tooltip.trigger 为item的时候有效
		/// </para>
		/// <para>
		/// right
		/// </para>
		/// <para>
		/// 鼠标所在图形右侧，只在 trigger
		/// </para>
		/// <para>
		/// #tooltip.trigger 为item的时候有效
		/// </para>
		/// <para>
		/// bottom
		/// </para>
		/// <para>
		/// 鼠标所在图形底侧，只在 trigger
		/// </para>
		/// <para>
		/// #tooltip.trigger 为item的时候有效
		/// </para>
		/// <para>string/Array/Function</para>
		/// </summary>
		public dynamic position { get; set; } 

		/// <summary>
		/// 提示框浮层内容格式器，支持字符串模板和回调函数两种形式
		/// <para>
		/// 1, 字符串模板
		/// </para>
		/// <para>
		/// 模板变量有 {a}, {b}，{c}，{d}，{e}，分别表示系列名，数据名，数据值等
		/// </para>
		/// <para>
		/// 在 trigger
		/// </para>
		/// <para>
		/// #tooltip.trigger 为 axis 的时候，会有多个系列的数据，此时可以通过 {a0}, {a1}, {a2} 这种后面加索引的方式表示系列的索引
		/// </para>
		/// <para>
		/// 不同图表类型下的 {a}，{b}，{c}，{d} 含义不一样
		/// </para>
		/// <para>
		/// 折线（区域）图、柱状（条形）图、K线图 : {a}（系列名称），{b}（类目值），{c}（数值）, {d}（无）
		/// </para>
		/// <para>
		/// 散点图（气泡）图 : {a}（系列名称），{b}（数据名称），{c}（数值数组）, {d}（无）
		/// </para>
		/// <para>
		/// 地图 : {a}（系列名称），{b}（区域名称），{c}（合并数值）, {d}（无）
		/// </para>
		/// <para>
		/// 饼图、仪表盘、漏斗图: {a}（系列名称），{b}（数据项名称），{c}（数值）, {d}（百分比）
		/// </para>
		/// <para>
		/// 更多其它图表模板变量的含义可以见相应的图表的 label.formatter 配置项
		/// </para>
		/// <para>
		/// 2, 回调函数
		/// </para>
		/// <para>
		/// 在 axisPointer
		/// </para>
		/// <para>
		/// #xAxis.axisPointer 触发的时候，params 是多个系列的数据数组
		/// </para>
		/// <para>
		/// 其中每项内容格式同上，并且，
		/// </para>
		/// <para>
		/// 注
		/// </para>
		/// <para>
		/// ECharts 2.x 使用数组表示各参数的方式不再支持
		/// </para>
		/// <para>
		/// 第二个参数 ticket 是异步回调标识，配合第三个参数 callback 使用
		/// </para>
		/// <para>
		/// 第三个参数 callback 是异步回调，在提示框浮层内容是异步获取的时候，可以通过 callback 传入上述的 ticket 和 html 更新提示框浮层内容
		/// </para>
		/// <para>string/Function</para>
		/// </summary>
		public dynamic formatter { get; set; } 

		/// <summary>
		/// 提示框浮层的背景颜色。
		/// </summary>
		public dynamic backgroundColor { get; set; }  = "rgba(50,50,50,0.7)";

		/// <summary>
		/// 提示框浮层的边框颜色。
		/// </summary>
		public dynamic borderColor { get; set; }  = "#333";

		/// <summary>
		/// 提示框浮层的边框宽。
		/// </summary>
		public dynamic borderWidth { get; set; }  = 0;

		/// <summary>
		/// 提示框浮层内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距。
		/// </summary>
		public dynamic padding { get; set; }  = 5;

		/// <summary>
		/// 提示框浮层的文本样式。
		/// </summary>
		public WUDI.ECharts.Polar.Tooltip.TextStyle textStyle { get; set; } 

		public dynamic extraCssText { get; set; } 

	}
}